草庐IT

Git rebase递归分支

全部标签

c# - Java中递归和非递归函数的效率比较

据我了解,由于函数调用的开销,递归函数的效率通常低于等效的非递归函数。但是,我最近遇到一本教科书,说这对于Java(和C#)不是必需的。它没有说明原因,但我认为这可能是因为Java编译器以某种方式优化了递归函数。有人知道为什么会这样吗? 最佳答案 教科书可能指的是尾调用优化;有关详细信息,请参阅@Travis的回答。但是,教科书在Java上下文中是不正确的。当前的Java编译器没有实现尾调用优化,显然是因为它会干扰Java安全实现,并且会改变出于各种目的对调用堆栈进行内省(introspection)的应用程序的行为。引用资料:Do

java - 递归搜索Java中的目录

在Java中查找具有特定名称的目录的最佳方法是什么?我要查找的目录可以位于当前目录或其子目录之一中。 最佳答案 在Java8中通过streamsAPI:Optionalhit=Files.walk(myPath).filter(file->file.getFileName().equals(myName)).findAny();#walk是懒惰的,所以任何short-circuitingterminaloperation将优化所需的IO。 关于java-递归搜索Java中的目录,我们在S

java - 递归 isPalindrome 函数如何工作?

我正在研究一些介绍性的递归问题,我有一个需要澄清的问题希望得到解答。我最烦心的问题是这个递归如何在下面解决的问题中运行?尽管解决了问题,但我只是不明白递归调用是如何进入字符串内部的。从代码来看,似乎这种方法只会检查给定字符串两端的两个字符,而不会检查其余部分。我的教科书给出了一个非常令人不满意的答案,基本上,只要您的return语句改进了问题,就不必担心递归的工作原理。但是,如果不了解如何以跟踪循环的方式跟踪递归方法,我就很难知道如何处理后续递归问题。任何智慧的话将不胜感激。谢谢!publicclassisPalindrome{publicstaticbooleanisPalindro

java - Java 中有类似分支/跳转表的东西吗?

Java有没有类似于分支或跳转表的东西?分支表或跳转表是,accordingtowikipedia,atermusedtodescribeanefficientmethodoftransferringprogramcontrol(branching)toanotherpartofaprogram(oradifferentprogramthatmayhavebeendynamicallyloaded)usingatableofbranchinstructions.Java是否有类似的东西,还是我只需要使用if/elseif/else或case语句? 最佳答案

java - 通过递归查找数组中最大的正整数

我决定递归地实现一个非常简单的程序,看看Java如何处理递归*,结果有点短。这就是我最后写的:publicclasslargestInIntArray{publicstaticvoidmain(String[]args){//Thesethreelinesjustsetupanarrayofints:int[]ints=newint[100];java.util.Randomr=newjava.util.Random();for(inti=0;ilargest)largest=i;returnlargest;}privatestaticintrecursive(int[]ints,in

java - 递归二叉搜索树插入

所以这是我的第一个java程序,但我已经做了几年的c++。我写了我认为应该起作用的东西,但实际上并没有。所以我规定必须为此调用编写一个方法:tree.insertNode(value);其中值是一个整数。出于显而易见的原因,我想递归地编写它,所以我不得不做一个变通:publicvoidinsertNode(intkey){Nodetemp=newNode(key);if(root==null)root=temp;elseinsertNode(temp);}publicvoidinsertNode(Nodetemp){if(root==null)root=temp;elseif(temp

java - 递归地对数组中的整数求和

我有一个程序,我正在尝试为使用递归返回数组中所有整数之和的类编写。到目前为止,这是我的程序:publicclassSumOfArray{privateint[]a;privateintn;privateintresult;publicintsumOfArray(int[]a){this.a=a;n=a.length;if(n==0)//basecaseresult=0;elseresult=a[n]+sumOfArray(a[n-1]);returnresult;}//EndSumOfArraymethod}//EndSumOfArrayClass但我收到了三个相关的错误,我相信,但我

Java:如何递归获取所有子目录?

在调试越界递归函数之前:是否有获取子目录的命令?giveMeSubDirs(downToPath)?//WARNING:RECURSIONoutofboundortoomuchdatapublicHashSetgetAllDirs(Stringpath){HashSetcheckedDirs=newHashSet();HashSetallDirs=newHashSet();StringstartingPath=path;FilefileThing=newFile(path);FileObjectfileObject=newFileObject(fileThing);for(FileOb

java - 识别列表中的循环或递归

我想为节点的以下结构识别列表中的循环或递归。我怎样才能识别相同的?publicclassEntityNode{privateEntityNodenextNode;//Pointstothenextnode}例子,Node1->Node2->Node3->Node4->Node5->Node6->Node4在这里,你可以看到Node6指向了Node4,这里就出现了循环或者递归,我的代码会进入无穷大。那么如果我想找出具有最佳性能水平的此类场景怎么办? 最佳答案 这其实是我听过几次的面试题。虽然我从未尝试实现任何类型的循环检测,但大多数面

java - 如何提高递归方法的性能?

我正在学习数据结构和算法,这是一个我一直困扰的问题。我必须通过将值存储到内存中来提高递归调用的性能。但问题是未改进的版本似乎比这更快。有人能帮帮我吗?Syracuse数是由以下规则定义的正整数序列:syra(1)≡1syra(n)≡n+syra(n/2),如果nmod2==0syra(n)≡n+syra((n*3)+1),否则importjava.util.HashMap;importjava.util.Map;publicclassSyraLengthsEfficient{intcounter=0;publicintsyraLength(longn){if(nmap=newHashM